﻿
namespace SistemaLogistica.Windows.Helpers
{
    using System;
    using System.Collections.Generic;
    using System.Windows.Forms;
    using SistemaLogistica.Business.Entities;
    using SistemaLogistica.Business.Logic;

    public class Metodos
    {
        public static List<EDOSwit.Security.Permiso> GetPermisos(byte formularioID)
        {
            List<EDOSwit.Security.Permiso> permisosEDOSwit = new List<EDOSwit.Security.Permiso>();
            try
            {
                List<Permiso> permisos = EmpleadoManager.Instancia.ListarPermisosPorUsuarioYFormulario(Empresa.Usuario.IdEmpleado, formularioID);

                foreach (Permiso p in permisos)
                {
                    permisosEDOSwit.Add(
                        new EDOSwit.Security.Permiso
                        {
                            FormularioID = p.IdFormulario,
                            UserID = p.IdEmpleado,
                            Estado = p.Estado,
                            TipoAcceso = (EDOSwit.Security.AccesoType)Enum.Parse(typeof(EDOSwit.Security.AccesoType), p.TipoPermiso.ToString())
                        });
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return permisosEDOSwit;
        }

        public static void GetAreas(int idSucursal, TreeView tv)
        {
            TreeNode padre = null;
            TreeNode hijo = null;
            try
            {
                List<Area> areas = AreaManager.Instancia.ListarPosSucursal(idSucursal);
                tv.Nodes.Clear();

                foreach (Area area in areas)
                {
                    hijo = new TreeNode();
                    hijo.Text = area.Nombre;
                    hijo.Name = area.IdArea.ToString();
                    hijo.ToolTipText = area.Nombre;

                    padre = GetAreaSuperior(area.IdAreaSuperior, tv.Nodes);

                    if (padre == null)
                    {
                        tv.Nodes.Add(hijo);
                    }
                    else
                    {
                        padre.Nodes.Add(hijo);
                    }
                }
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }

        private static TreeNode GetAreaSuperior(int? nodoBusqueda, TreeNodeCollection nodos)
        {
            TreeNode padre = null;
            bool encontrado = false;
            int contador = 0;

            while (encontrado == false && contador < nodos.Count && nodoBusqueda.HasValue)
            {
                if (Convert.ToInt32(nodos[contador].Name) == nodoBusqueda)
                {
                    encontrado = true;
                    padre = nodos[contador];
                }
                else
                {
                    if (nodos[contador].Nodes.Count > 0)
                    {
                        padre = GetAreaSuperior(nodoBusqueda, nodos[contador].Nodes);
                        if (padre != null)
                        {
                            encontrado = true;
                        }
                    }
                }
                contador++;
            }
            return padre;
        }
    }
}
